package com.kdg.juc;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created by kong on 2017/7/27.
 * 创建执行线程的方式三:实现Callable接口 相较于Runnable就是方法有返回值并且可以抛出异常
 */
public class TestCollable {
    public static void main(String[] args) {
        ThreadDemo2 threadDemo2 = new ThreadDemo2();
        //1.执行Callable方式  需要FutureTask实现类支持  用于接收返回结果. FutureTask是Future接口的实现类
        FutureTask<Integer> result = new FutureTask<Integer>(threadDemo2);
         new Thread(result).start();
//         2.接收线程返回的结果
        try {
            Integer sum = result.get();  //FutureTask也可用于闭锁的操作  因为这里是等着上面线程执行完之后在执行
            System.out.println(sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }
}


class ThreadDemo2 implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for(int i=0;i<10;i++){
            System.out.println(i);
            sum += i;
        }
        return sum;
    }
}
/*class ThreadDemo implements Runnable{
    @Override
    public void run() {

    }
}*/

//
//java类是单继承的。classB Extends classA
//        java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……
//
//        不允许类多重继承的主要原因是，如果A同时继承B和C，而b和c同时有一个D方法，A如何决定该继承那一个呢？
//        但接口不存在这样的问题，接口全都是抽象方法继承谁都无所谓，所以接口可以继承多个接口。

interface A{}
interface B{}
interface C extends A,B{}

